/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package co.uniandes.patrones.beans;

import co.uniandes.patrones.entidades.AdministradorSolicitudes;
import co.uniandes.patrones.entidades.AdministradorUsuarios;
import co.uniandes.patrones.entidades.Solicitud;
import co.uniandes.patrones.entidades.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author alvar-go@uniandes.edu.co
 */
public class SolicitudesTallerBean {

    private final static String SOLICITUD_ERRONEA = "versolicitudestaller", SOLICITUD_SUBIR_DIAGNOSTICO = "subirdiagnostico", ENVIAR_RESULTADO_REPARACION = "resultadoreparacion";

    public final static String SESION_PLACA = "placasolictud";

    private List<String> placas;

    private String placaSeleccionada;

    private List<Solicitud> solicitudes;

    private AdministradorSolicitudes admin;

    private String identificacion;

    private Usuario clienteActual;

    public SolicitudesTallerBean() {
        placas = new ArrayList<String>();
        solicitudes = new ArrayList<Solicitud>();
        cargarDatos();
    }

    public SolicitudesTallerBean(List<String> placas, String placaSeleccionada, List<Solicitud> solicitudes, AdministradorSolicitudes admin, String identificacion) {
        this.placas = placas;
        this.placaSeleccionada = placaSeleccionada;
        this.solicitudes = solicitudes;
        this.admin = admin;
        this.identificacion = identificacion;
    }

    private void cargarDatos(){
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession sesion = (HttpSession) context.getExternalContext().getSession(false);
        if( sesion != null){
             AdministradorUsuarios ad = AdministradorUsuarios.getInstancia();
             admin = AdministradorSolicitudes.getInstancia();
             clienteActual = ad.buscarUsuario((String)sesion.getAttribute(IngresoBean.SESION_LOGIN));
             identificacion = clienteActual.getTipo() +":" + clienteActual.getLogin();
             solicitudes = admin.darSolicitudesTaller(clienteActual.getId());
             placas = admin.darSolicitudesTallerToString(clienteActual.getId());
        }
    }

    public String getIdentificacion() {
        return identificacion;
    }

    public String getPlacaSeleccionada() {
        return placaSeleccionada;
    }

    public AdministradorSolicitudes getAdmin() {
        return admin;
    }

    public List<String> getPlacas() {
        return placas;
    }

    public List<Solicitud> getSolicitudes() {
        return solicitudes;
    }

    public void setIdentificacion(String identificacion) {
        this.identificacion = identificacion;
    }

    public void setPlacaSeleccionada(String placaSeleccionada) {
        this.placaSeleccionada = placaSeleccionada;
    }

    public void setPlacas(List<String> placas) {
        this.placas = placas;
    }

    public void setSolicitudes(List<Solicitud> solicitudes) {
        this.solicitudes = solicitudes;
    }

    public String continuarReparacion(){
        if(placaSeleccionada != null){
            Solicitud s = admin.darSolicitud(placaSeleccionada);
            if(s.getEstado().equals(Solicitud.ESTADO_SOLICITADA)){
                s.setEstado(Solicitud.ESTADO_EN_TALLER);
                return SOLICITUD_ERRONEA;
            }else if(s.getEstado().equals(Solicitud.ESTADO_EN_TALLER)){
                FacesContext context = FacesContext.getCurrentInstance();
                HttpSession sesion = (HttpSession) context.getExternalContext().getSession(false);
                if( sesion != null){
                    sesion.setAttribute(SESION_PLACA, placaSeleccionada);
                }
                return  SOLICITUD_SUBIR_DIAGNOSTICO;
            }else if(s.getEstado().equals(Solicitud.ESTADO_DESC_RECHAZADA)){
                FacesContext context = FacesContext.getCurrentInstance();
                HttpSession sesion = (HttpSession) context.getExternalContext().getSession(false);
                if( sesion != null){
                    sesion.setAttribute(SESION_PLACA, placaSeleccionada);
                }
                return  SOLICITUD_SUBIR_DIAGNOSTICO;
            }else if(s.getEstado().equals(Solicitud.ESTADO_DESC_ACEPTADA)){
                FacesContext context = FacesContext.getCurrentInstance();
                HttpSession sesion = (HttpSession) context.getExternalContext().getSession(false);
                if( sesion != null){
                    sesion.setAttribute(SESION_PLACA, placaSeleccionada);
                }
                return ENVIAR_RESULTADO_REPARACION;
            }
            else{
                return  SOLICITUD_ERRONEA;
            }
        }else{
            return  SOLICITUD_ERRONEA;
        }
    }
}
